@Transactional Annotation এর ব্যবহার

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) - Spring JDBC Transaction Management
249

@Transactional স্প্রিং ফ্রেমওয়ার্কে একটি অ্যানোটেশন, যা ডেটাবেস ট্রানজেকশন ম্যানেজমেন্ট সহজ এবং কার্যকর করে। এটি ডেভেলপারদের ম্যানুয়ালি ট্রানজেকশন পরিচালনার ঝামেলা থেকে মুক্তি দেয় এবং ডাটাবেস অপারেশনের নির্ভুলতা নিশ্চিত করে।


@Transactional এর প্রধান বৈশিষ্ট্য:

  1. অটোমেটিক ট্রানজেকশন ম্যানেজমেন্ট:
    • স্প্রিং নিজেই ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক পরিচালনা করে।
  2. রোলব্যাক সাপোর্ট:
    • যখন কোনো এক্সেপশন ঘটে, তখন স্বয়ংক্রিয়ভাবে ট্রানজেকশন রোলব্যাক হয়।
  3. ডেক্লারেটিভ ট্রানজেকশন:
    • কোডে অতিরিক্ত API ব্যবহার না করে কেবলমাত্র অ্যানোটেশনের মাধ্যমে ট্রানজেকশন পরিচালনা করা যায়।
  4. কাস্টমাইজেশন:
    • ট্রানজেকশনের Propagation, Isolation Level, এবং Timeout কনফিগার করা যায়।

@Transactional ব্যবহারের ধাপসমূহ:

1. ডিপেনডেন্সি যোগ করা:

Spring JDBC বা Spring Data JPA এর জন্য Maven/Gradle ডিপেনডেন্সি যোগ করুন।

Maven Dependency:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.3.21</version>
</dependency>

2. কনফিগারেশন:

  • XML Configuration:

    <tx:annotation-driven transaction-manager="transactionManager" />
    
  • Java Configuration:

    @Configuration
    @EnableTransactionManagement
    public class AppConfig {
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
            dataSource.setUsername("root");
            dataSource.setPassword("password");
            return dataSource;
        }
    
        @Bean
        public JdbcTemplate jdbcTemplate(DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    
        @Bean
        public PlatformTransactionManager transactionManager(DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    }
    

3. @Transactional অ্যানোটেশন ব্যবহার:

ডেটাবেজ অপারেশনে @Transactional যুক্ত করা:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class EmployeeService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public void addEmployeeAndDepartment() {
        // Add Employee
        String employeeQuery = "INSERT INTO employees (id, name, department) VALUES (?, ?, ?)";
        jdbcTemplate.update(employeeQuery, 1, "John Doe", "IT");

        // Simulate an exception
        if (true) {
            throw new RuntimeException("Simulated Exception");
        }

        // Add Department
        String departmentQuery = "INSERT INTO departments (id, name) VALUES (?, ?)";
        jdbcTemplate.update(departmentQuery, 1, "IT");
    }
}

Main Class:

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        EmployeeService employeeService = context.getBean(EmployeeService.class);

        try {
            employeeService.addEmployeeAndDepartment();
        } catch (Exception e) {
            System.out.println("Transaction Rolled Back: " + e.getMessage());
        }

        context.close();
    }
}

4. Propagation এবং Isolation Levels কনফিগার করা:

@Transactional অ্যানোটেশনের মাধ্যমে ট্রানজেকশনের আচরণ কাস্টমাইজ করা যায়।

Propagation:

  • REQUIRED (Default): যদি কোনো বিদ্যমান ট্রানজেকশন থাকে, সেটির অংশ হবে; না থাকলে নতুন ট্রানজেকশন শুরু হবে।
  • REQUIRES_NEW: সবসময় নতুন ট্রানজেকশন শুরু করে।

Isolation:

  • READ_COMMITTED: একাধিক ট্রানজেকশন কমিট হওয়া ডেটা পড়তে পারে।
  • SERIALIZABLE: সর্বোচ্চ লেভেলের আইসোলেশন, যেখানে ট্রানজেকশনগুলি একে অপরকে প্রভাবিত করে না।

Example:

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
public void addEmployeeAndDepartment() {
    // Method logic
}

5. Checked এবং Unchecked Exceptions:

  • Unchecked Exception (RuntimeException):
    ট্রানজেকশন স্বয়ংক্রিয়ভাবে রোলব্যাক হয়।
  • Checked Exception:
    রোলব্যাক করতে হলে @Transactional(rollbackFor = Exception.class) ব্যবহার করতে হবে।

Example:

@Transactional(rollbackFor = Exception.class)
public void addEmployee() throws Exception {
    // Method logic
}

@Transactional ব্যবহার করার সুবিধা:

  1. সাধারণ ট্রানজেকশন ম্যানেজমেন্ট:
    API বা ম্যানুয়াল ট্রানজেকশন ব্যবস্থাপনার প্রয়োজন নেই।
  2. রোলব্যাক:
    অ্যানোটেশনের মাধ্যমে স্বয়ংক্রিয় রোলব্যাক কনফিগার করা সহজ।
  3. প্রসঙ্গভিত্তিক কাস্টমাইজেশন:
    প্রয়োজন অনুযায়ী Propagation এবং Isolation Level নির্ধারণ করা যায়।

উপসংহার:

@Transactional অ্যানোটেশন Spring JDBC-তে ডাটাবেজ ট্রানজেকশন ম্যানেজমেন্টকে সহজ এবং কার্যকর করে। এটি ছোট থেকে বড় অ্যাপ্লিকেশনে নির্ভুলতা ও স্থায়িত্ব নিশ্চিত করতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...